// 请求路径配置项 baseUrl
import { config } from '../api/config.js'

// 引入工具类
import { Util } from './util.js'

class Http {
	static async request(url, data = {}, method = 'POST', type = '', responseType='') {
		Util.showLoading('加载中...')
		let user = JSON.parse(Util.getStorage('user'))
		let token
		if (!Util.isNull(user)) {
			token = user.token || user.accessToken
		} else {
			token = null
		}
		const [error, res] = await uni.request({
			url: config.baseUrl + url,
			data,
			method,
			header: {
				'Authorization': token? ('Bearer ' + token):token,
				"Content-Type": type
			},
			responseType
		})
		Util.hideLoading()
		// console.log(res, error, 'res --- error')
		if (!Util.isNull(error)) {
			// console.log(res, error, '杀杀杀')
			Util.showToast(error.errMsg, 1)
			Util.removeStorage('user')
			return
		}
		
		if (res.statusCode !== 200) {
			if (res.statusCode === 500) {
				Util.showToast(`系统：${ res.data.message }`, 1)
				return
			}
			Util.showToast('网络或服务器异常', 1)
			return
		}
		
		if (res.statusCode == 200) {
			if (res.data.code == 401) {
				Util.showToast(res.data.message, 1)
				uni.redirectTo({
					url: '/pages/login/login'
				})
				Util.removeStorage('user')
			} else if (res.data.code == 403) {
				Util.showToast('您没有相关权限，请联系管理员！', 1)
			}
		}
		return res.data
	}
	
	static async uploadFile(url, filePath, data, name='') {
		Util.showLoading('上传中...')
		let user = JSON.parse(Util.getStorage('user'))
		let token
		if (!Util.isNull(user)) {
			token = user.token || user.accessToken
		} else {
			token = null
		}
		const [error, res] = await uni.uploadFile({
			url: config.baseUrl + url,
			filePath: filePath,
			name,
			formData: {
				'file': data
			},
			header: {
				// 'token': token,
				'Authorization': token? ('Bearer ' + token):token,
			}
		})
		Util.hideLoading()
		if (!Util.isNull(error)) {
			// console.log(res, error, '杀杀杀')
			Util.showToast(error.errMsg, 1)
			Util.removeStorage('user')
			return
		}
		
		if (res.statusCode !== 200) {
			if (res.statusCode === 500) {
				Util.showToast(`系统：${ res.data.message }`, 1)
				return
			}
			Util.showToast('网络或服务器异常', 1)
			return
		}
		if (res.statusCode == 200 && res.data.code == 401) {
			Util.showToast(res.data.message, 1)
			uni.redirectTo({
				url: '/pages/login/login'
			})
			Util.removeStorage('user')
		}
		return res.data
	}
}

export {
	Http
}
